import re  # 正则框架，主要通过re利用正则公式对文本进行处理
import collections

sequence = "Where is the captain of China?The captain of China is Beijing."

# 剔除与word无关的信息

# 正则表达式的补充内容：
# [] 一个词，且括号中可以定义正则表达式的规则
# ^ : 非（不是）
# a-zA-Z : 包含所有的大小写字母 (0-9,所有数字)
# + : 一个或者多个
# .lower() 全变为小写
# .strip() 去掉前后空格
sequence = re.sub("[^a-zA-Z]+", " ", sequence).lower().strip()
#  ============= word 模式 ===============
# sequence.split() 此处默认以空格分类，且主要一个词进行划分
words = sequence.split()
#  ============= char 模式 ===============
# chars = list(sequence)
# print(chars)

# 根据统计词汇出现的频率，来制定一个映射表
word_freqs = collections.Counter(words)
# 将统计频率转化为对应的列表
word_dict = list(word_freqs.items())
# 将列表通过词频进行排序
word_dict = sorted(word_dict, key=lambda x: x[1], reverse=True)
# 根据id可以获取对应的词汇
idx_to_token = [item[0] for item in word_dict]
# print(idx_to_token)
# print([idx_to_token[i] for i in [4, 3, 5, 1]])

# 根据对应的词汇名称获得其id
token_to_idx = {item: index for index, item in enumerate(idx_to_token)}
print(token_to_idx)
print([token_to_idx.get(word) for word in "The captain of China is Beijing".lower().split()])
